package NewCharacter;

public class Demo1_NewCharacter {

    /**
     * 1.java.time
     * 2.接口增强
     *   jdk8之前 接口中只能存在抽象方法，不允许存在普通方法
     *           弊端：如果只想在某个接口中创建一个自己使用的方法，如果是抽象的子类就必须重写
     *   jdk8之后 接口中可以存在普通方法，但是必须使用 default 或 static 进行修饰
     *           default 修饰的方法，子类可以重写，也可以不重写
     *           static 修饰的方法,不能被重写。必须使用 接口名.方法名 形式调用
     * 3.lambda表达式 (匿名函数)
     *   在其他语言中早就存在，但是在java中是jdk8才出现的一个新东西
     *   匿名内部类：对类进行一些优化。可以没有类名，直接 new 接口重写抽象方法实现 类的功能
     *   匿名函数：对函数进行一些优化。可以没有函数名
     *
     *   使用的要求：
     *     1.必须针对 函数式接口(接口中必须只能存在一个抽象方法) 使用
     *     2.无需单独创建类来实现接口，也无需 new 接口创建匿名内部类
     *       可以直接重写这个函数式接口的方法，且没有方法名
     *     3.需要使用此接口名接收对象，否则不知道创建的是哪个接口的实现类
     *   语法格式
     *     接口名 实现类对象 = ([参数,...]) -> {函数体;};
     *   省略模式
     *     1.参数类型本身可以省略
     *     2.如果参数有且只有一个，参数的小括号可以省略
     *     3.方法体中有且只有一句代码执行，可以同时省略 大括号 return关键字 分号
     *   常用的 内置 函数式接口
     *     1.Supplier 供给
     *       T get()  无参数有返回值，一般表示生成一个数据然后返回
     *     2.Consumer 消费
     *       void accept(T t) 有参无返回值，一般表示对传来的参数进行处理，但不返回
     *     3.Function 函数
     *       R apply(T t)  有参有返回值，一般表示对参数进行处理后进行返回
     *     4.Predicate 对某种情况进行判断
     *       boolean test(T t) 有参返回布尔类型值,一般是对参数进行某种条件的判断
     *
     * 4.方法引用
     *   对匿名函数继续进行优化
     *   4.1 对象名引用成员方法
     *   4.2 类名引用静态方法
     *   4.3 类名引用实例方法
     *   4.4 引用构造方法
     *
     * 5.Stream流
     *   与IO流没有任何关系，属于集合的范围
     *   相当于其他语言的 高阶函数
     *   高阶函数：以函数为参数或以函数为返回值的函数就是高阶函数
     *   5.1 怎么创建Stream流
     *       可以通过已有集合 .stream() 直接转成 Stream 类型
     *       本身没有集合但有很多数据  Stream.of(T... t) 转成 Stream 类型
     *   5.2 怎么使用Stream流
     *       Stream类中给我们提供了很多的API操作
     *       方法的分类
     *         终结方法
     *           调用之后返回了具体的数据类型不再是Stream类型，只能在最后调用一次
     *           count foreach collect
     *         非终结方法
     *           调用之后返回值依然是Stream，所以可以链式调用。
     *           如果不调用终结方法，类型永远都是Stream，所以不能获取想要的最终结果
     *           filter limit skip map sorted distinct
     *
     */

}
